package com.foreknow.controller;

import com.foreknow.model.Admin;
import com.foreknow.service.AdminService;
import com.foreknow.service.impl.AdminServiceImpl;
//import jakarta.servlet.ServletException;
//import jakarta.servlet.http.HttpServlet;
//import jakarta.servlet.http.HttpServletRequest;
//import jakarta.servlet.http.HttpServletResponse;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

/**
 * servlet：服务端的应用程序（使用java编写）
 * 作用：处理客户端请求（例如用户填写的数据）
 * 所有的类都要继承HttpServlet
 *
 * 1.想要创建Servlet一定要继承HttpServlet
 * 2.需要重写doget、dopost方法
 *   什么时候调用这两个方法：当客户端向服务器端发送的请求get，就会调用servlet中的doGet方法
 *                           当客户端向服务器端发送的请求post，就会调用servlet中的doPost方法
 *
 * 3.方法的参数
 *      3.1 HttpServletRequest接口   这个接口无需我们初始化，他会让服务器自动进行初始化
 *          接口当中会提供一些常用的方法来处理一些请求的参数
 *          req.getContextPath()   获取到application context的路径
 *          req.getParameter("username")  获取到请求参数(用户名)
 *      3.2 HttpServletResponse接口   这个接口无需我们初始化，他会让服务器自动进行初始化
 *  *          接口当中会提供一些常用的方法来处理一些请求的参数
 *
 *  关于Servlet中的资源跳转
 *  1.请求转发：  request.getRequestDispatcher("/getallmessage").forward(request,response);
 *       相当于客户端向服务器发送一次请求
 *       url的地址是第一次发送的地址  http：//localhost:8080/MS/user/add
 *       请求转发只能转发站内的资源，不能转发站外的资源
 *  2.重定向：    response.sendRedirect("/user/get");
 *      相当于客户端向服务器端发送了两次请求
 *      url地址是最终目标资源的地址        http：//localhost:8080/MS/user/get
 *      重定向可以向任意资源（站内站外）
 *
 */
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
//        writer.println("<html>");
//        writer.println("<head>");
//        writer.println("<title>AdminServiceImpl AddMessageBookServlet </title>");
//        writer.println("</head>");
//        writer.println("<body>");
//        writer.println(new Date());
//        writer.println("</body>");
//        writer.println("</html>");
//        writer.println("<br>");
//        writer.println("获取请求的方法："+req.getMethod());
//        writer.println("<br>");
//        writer.println("获取到application context的路径："+req.getContextPath()+"<br>");
//        writer.println("获取到请求的URI地址："+req.getRequestURI()+"<br>");
//        writer.println("获取到请求参数(用户名)："+req.getParameter("username"));

    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        //获取初始化参数（局部）
        //String pageSize = config.getInitParameter("pageSize");
        //获取全局的初始化参数
        String pageSize = config.getServletContext().getInitParameter("pageSize");
        System.out.println(pageSize);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        PrintWriter writer = resp.getWriter();
        //如何获取到HttpSession之后就可以将数据保存到session中用于数据共享
        HttpSession session = req.getSession();
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        Admin admin=new Admin();
        admin.setUsername(username);
        admin.setPassword(password);

        AdminService loginService=new AdminServiceImpl();
        Admin admin1=null;
        try {
            admin1 = loginService.login(admin);
            if (admin1!=null) {
                //将用户名保存到session中
                session.setAttribute("admin",admin1);
                req.getRequestDispatcher("/user/manager?q=list").forward(req,resp);
            }else {
                writer.println("<script>alert('用户名或密码错误')</script>");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}
